gusucode.com > 各种VC自绘控件源码程序 > 各种VC自绘控件源码/code/SkinControls(自绘MFC基本控件 )/SkinControls/SkinControls/SkinUICheckBox.cpp

    
#include "StdAfx.h"
#include "SkinUICheckBox.h"
#include "SkinUIWnd.h"

CSkinUICheckBox::CSkinUICheckBox(void) : m_bCheck(false)
{
	m_uTextFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
}

CSkinUICheckBox::~CSkinUICheckBox(void)
{
}

LPCTSTR CSkinUICheckBox::GetClass() const
{
	return TEXT("SkinUICheckBox");
}

void CSkinUICheckBox::PaintText(CDC * pDC)
{
	if (!IsVisible()) return;

	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(0,0,0));
	pDC->SelectObject(m_pFont);
	CRect rcText = m_rcItem;
	rcText.left += m_ImageStatus.GetWidth()/8+4;
	pDC->DrawText(m_strText, &rcText, m_uTextFormat);
}

void CSkinUICheckBox::PaintStatusImage(CDC * pDC)
{
	if (!IsVisible()) return;

	int nButtonWidth = m_ImageStatus.GetWidth()/8;
	int nButtonHeight = m_ImageStatus.GetHeight();
	m_ImageStatus.Draw(pDC->m_hDC, m_rcItem.left, m_rcItem.top, nButtonWidth, nButtonHeight, 
		(m_bCheck?(m_byStatus+4):(m_byStatus)) * nButtonWidth, 0, nButtonWidth, nButtonHeight);
}

//操作相关
void CSkinUICheckBox::MouseMove(const CPoint & point)
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	if ((m_Rgn.PtInRegion(point) == TRUE) && (!m_bNeedInvalidate) && (!m_bLButtonDown))
	{
		m_byStatus = 1;
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
	else if (m_Rgn.PtInRegion(point) == FALSE)
	{
		m_byStatus = 0;
		m_bNeedInvalidate = false;
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
}

void CSkinUICheckBox::MouseLeave()
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	if (m_byStatus != 0)
	{
		m_byStatus = 0;
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
}

void CSkinUICheckBox::MouseLButtonDown(const CPoint & point)
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	if ((m_Rgn.PtInRegion(point) == TRUE) )
	{
		m_bLButtonDown = true;
		m_pParentWnd->SetCapture();
		m_byStatus = 2;
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
}

void CSkinUICheckBox::MouseLButtonUp(const CPoint & point)
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	ReleaseCapture();
	if ((m_Rgn.PtInRegion(point) == TRUE) && m_bLButtonDown)
	{
		m_byStatus = 0;
		SetCheck(!m_bCheck);
		m_pParentWnd->LButtonClickListener(GetName());
	}
	m_bLButtonDown = false;
}

BOOL CSkinUICheckBox::MouseCursor(const CPoint & point)
{
	return FALSE;
}

void CSkinUICheckBox::SetEnabled(bool bEnable)
{
	m_bEnabled = bEnable;
	m_byStatus = !bEnable ? 3 : 0;
}

void CSkinUICheckBox::SetImage(LPCTSTR pszFileName, DWORD imageType)
{
	m_ImageStatus.Load(pszFileName, imageType);
}


void CSkinUICheckBox::SetPos(const CRect & rc)
{
	m_rcItem = rc;
	m_Rgn.SetRectRgn(&m_rcItem);
}

void CSkinUICheckBox::SetPos(int x, int y, int cx, int cy)
{
	m_rcItem.left = x;
	m_rcItem.top = y;
	m_rcItem.right = m_rcItem.left + cx;
	m_rcItem.bottom = m_rcItem.top + cy;
	m_Rgn.SetRectRgn(&m_rcItem);
}

void CSkinUICheckBox::SetCheck(bool bCheck /* = true */)
{
	m_bCheck = bCheck;
	m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
}